package br.com.skpharma.dao;

import java.util.ArrayList;

import br.com.skpharma.db.DB;
import br.com.skpharma.vo.MedicamentoVO;
import br.com.skpharma.vo.CategoriaVO;
import br.com.skpharma.vo.PrincipioAtivoVO;
import br.com.skpharma.vo.LaboratorioVO; 	

public class DAOMedicamento {
	
	private DB db = new DB("jdbc:postgresql://localhost:5432/skpharma","postgres","postgres");
	private MedicamentoVO medicamento;
	
	public DAOMedicamento(){
		medicamento = new MedicamentoVO();
	}
	
	public void setMedicamento(MedicamentoVO nMedicamentoVO){
		medicamento = nMedicamentoVO;
	}

	public MedicamentoVO getMedicamentoVO(){
		return(medicamento);
	}
	
	
	public void salvar(){

		if(db.connect()){

			db.update("insert into medicamento (ds_medicamento, quantidade, preco, conteudo,cd_laboratorio,cd_principioativo,cod_categoria) values ('"+ 
					  medicamento.getDs()+	 
					  "','"+medicamento.getQtde()+
					  "','"+medicamento.getPreco()+
					  "','"+medicamento.getConteudo()+
					  "','"+medicamento.getLaboratorioVO().getCod() +
					  "','"+medicamento.getPrincipioAtivoVO().getCod() +
					  "','"+medicamento.getCategoriaVO().getCod() +
					  "')");
			db.disconnect();
		}		
	}
	
	public void excluir(){
		if(db.connect()){
			db.update("delete from medicamento where cod_medicamento = " + medicamento.getCod() );			
			db.disconnect();
		}		
	}
	
	
	public void comprar(int qtd){

		medicamento.atualizaQtde(qtd);

		if(db.connect()){
			db.update("update medicamento set quantidade='"+ medicamento.getQtde()  +"'" +
					  "where cod_medicamento = " + medicamento.getCod());			
			db.disconnect();
		}		
	}
	
	
	public void editar(){		
		if(db.connect()){
				db.update("update medicamento set ds_medicamento='"+ medicamento.getDs() +"'," +
						"quantidade='"+ medicamento.getQtde() +"'," +
						"preco='"+ medicamento.getPreco() +"'," +
						"conteudo='"+ medicamento.getConteudo() +"'," +
						"cd_laboratorio='"+ medicamento.getLaboratorioVO().getCod() +"'," +
						"cd_principioativo='"+ medicamento.getPrincipioAtivoVO().getCod() +"'," +
						"cod_categoria='"+ medicamento.getCategoriaVO().getCod() + "' " +
						"where cod_medicamento= " + medicamento.getCod());			
			db.disconnect();
		}		
	}
	
	public ArrayList buscaNome(String nome){
		ArrayList lista = new ArrayList();
		MedicamentoVO medicamentoVO;
		if(db.connect()){
			db.select("select medicamento.*,laboratorio.ds_laboratorio as ds_laboratorio,principioativo.ds_principioativo as ds_principioativo,categoria.ds_categoria as ds_categoria from medicamento,laboratorio,principioativo,categoria where medicamento.cd_laboratorio = laboratorio.cd_laboratorio and principioativo.cd_principioativo = medicamento.cd_principioativo and categoria.cod_categoria = medicamento.cod_categoria and ds_medicamento =" + "'" + nome + "'");
			while(db.moveNext()){
				medicamentoVO = new MedicamentoVO( db.getInt("cod_medicamento"),  db.getString("ds_medicamento"), db.getInt("quantidade"),   db.getFloat("preco"), db.getString("conteudo"), new LaboratorioVO( db.getInt("cd_laboratorio"), db.getString("ds_laboratorio")), new PrincipioAtivoVO( db.getInt("cd_principioativo"),   db.getString("ds_principioativo")), new CategoriaVO(db.getInt("cod_categoria"),db.getString("ds_categoria")));
				lista.add(medicamentoVO);
			}
			db.disconnect();
		}	
		return lista;
		
	}
	
	
	public ArrayList buscaLaboratorio(int cod){
		ArrayList lista = new ArrayList();
		MedicamentoVO medicamentoVO;
		if(db.connect()){
			db.select("select medicamento.*,laboratorio.ds_laboratorio as ds_laboratorio,principioativo.ds_principioativo as ds_principioativo,categoria.ds_categoria as ds_categoria from medicamento,laboratorio,principioativo,categoria where medicamento.cd_laboratorio = laboratorio.cd_laboratorio and principioativo.cd_principioativo = medicamento.cd_principioativo and categoria.cod_categoria = medicamento.cod_categoria and laboratorio.cd_laboratorio =" + cod);
			while(db.moveNext()){
				medicamentoVO = new MedicamentoVO( db.getInt("cod_medicamento"),  db.getString("ds_medicamento"), db.getInt("quantidade"),   db.getFloat("preco"), db.getString("conteudo"), new LaboratorioVO( db.getInt("cd_laboratorio"), db.getString("ds_laboratorio")), new PrincipioAtivoVO( db.getInt("cd_principioativo"),   db.getString("ds_principioativo")), new CategoriaVO(db.getInt("cod_categoria"),db.getString("ds_categoria")));
				lista.add(medicamentoVO);
			}
			db.disconnect();
		}	
		return lista;
		
	}
	
	public ArrayList buscaPrincipioAtivo(int cod){
		ArrayList lista = new ArrayList();
		MedicamentoVO medicamentoVO;
		if(db.connect()){
			db.select("select medicamento.*,laboratorio.ds_laboratorio as ds_laboratorio,principioativo.ds_principioativo as ds_principioativo,categoria.ds_categoria as ds_categoria from medicamento,laboratorio,principioativo,categoria where medicamento.cd_laboratorio = laboratorio.cd_laboratorio and principioativo.cd_principioativo = medicamento.cd_principioativo and categoria.cod_categoria = medicamento.cod_categoria and principioativo.cd_principioativo =" + cod);
			while(db.moveNext()){
				medicamentoVO = new MedicamentoVO( db.getInt("cod_medicamento"),  db.getString("ds_medicamento"), db.getInt("quantidade"),   db.getFloat("preco"), db.getString("conteudo"), new LaboratorioVO( db.getInt("cd_laboratorio"), db.getString("ds_laboratorio")), new PrincipioAtivoVO( db.getInt("cd_principioativo"),   db.getString("ds_principioativo")), new CategoriaVO(db.getInt("cod_categoria"),db.getString("ds_categoria")));
				lista.add(medicamentoVO);
			}
			db.disconnect();
		}	
		return lista;
		
	}
	
	public ArrayList obterLista(){
		ArrayList lista = new ArrayList();
		MedicamentoVO medicamentoVO;
		if(db.connect()){
			db.select("select medicamento.* , laboratorio.ds_laboratorio as ds_laboratorio, principioativo.ds_principioativo as ds_principioativo, categoria.ds_categoria as ds_categoria from medicamento,laboratorio,principioativo, categoria where laboratorio.cd_laboratorio = medicamento.cd_laboratorio  and principioativo.cd_principioativo = medicamento.cd_principioativo and categoria.cod_categoria = medicamento.cod_categoria");
			while(db.moveNext()){
				medicamentoVO = new MedicamentoVO( db.getInt("cod_medicamento"),  db.getString("ds_medicamento"), db.getInt("quantidade"),   db.getFloat("preco"), db.getString("conteudo"), new LaboratorioVO( db.getInt("cd_laboratorio"), db.getString("ds_laboratorio")), new PrincipioAtivoVO( db.getInt("cd_principioativo"),   db.getString("ds_principioativo")), new CategoriaVO(db.getInt("cod_categoria"),db.getString("ds_categoria")));
				lista.add(medicamentoVO);
			}
			db.disconnect();
		}		
		return lista;
	}

	public void obter(int codigo){		
		if(db.connect()){
			db.select("select medicamento.*,laboratorio.ds_laboratorio as ds_laboratorio,principioativo.ds_principioativo as ds_principioativo,categoria.ds_categoria as ds_categoria from medicamento,laboratorio,principioativo,categoria where medicamento.cd_laboratorio = laboratorio.cd_laboratorio and principioativo.cd_principioativo = medicamento.cd_principioativo and categoria.cod_categoria = medicamento.cod_categoria and cod_medicamento =" + codigo);
			if(db.moveNext()){				
				medicamento.setCod(db.getInt("cod_medicamento"));
				medicamento.setDs(db.getString("ds_medicamento"));
				medicamento.setQtde(db.getInt("quantidade"));
				medicamento.setPreco(db.getFloat("preco"));
				medicamento.setConteudo(db.getString("conteudo"));
				medicamento.getLaboratorioVO().setDs(db.getString("ds_laboratorio"));
				medicamento.getPrincipioAtivoVO().setDs(db.getString("ds_principioativo"));		
				medicamento.getCategoriaVO().setDs(db.getString("ds_categoria"));

				DAOLaboratorio daoLaboratorio = new DAOLaboratorio();
				daoLaboratorio.carregar(db.getInt("cd_laboratorio"));
				medicamento.setLaboratorioVO(daoLaboratorio.getLaboratorioVO());
				
				DAOPrincipioAtivo daoPrincipioAtivo = new DAOPrincipioAtivo();
				daoPrincipioAtivo.carregar(db.getInt("cd_principioativo"));
				medicamento.setPrincipioAtivoVO(daoPrincipioAtivo.getPrincipioAtivoVO());
				
				DAOCategoria daoCategoria = new DAOCategoria();
				daoCategoria.carregar(1);
				medicamento.setCategoriaVO(daoCategoria.getCategoriaVO());
				
				
			}
			
			db.disconnect();
		}		
	}


}
